forked from kevinlin311tw/Caffe-DeepBinaryCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_syncedmem.cpp
More file actions
126 lines (106 loc) · 3.5 KB
/
test_syncedmem.cpp
File metadata and controls
126 lines (106 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <cstring>
#include <vector>
#include "gtest/gtest.h"
#include "caffe/common.hpp"
#include "caffe/syncedmem.hpp"
#include "caffe/util/device_alternate.hpp"
#include "caffe/util/math_functions.hpp"
#include "caffe/test/test_caffe_main.hpp"
namespace caffe {
class SyncedMemoryTest : public ::testing::Test {};
TEST_F(SyncedMemoryTest, TestInitialization) {
SyncedMemory mem(10);
EXPECT_EQ(mem.head(), SyncedMemory::UNINITIALIZED);
EXPECT_EQ(mem.size(), 10);
SyncedMemory* p_mem = new SyncedMemory(10 * sizeof(float));
EXPECT_EQ(p_mem->size(), 10 * sizeof(float));
delete p_mem;
}
#ifndef CPU_ONLY // GPU test
TEST_F(SyncedMemoryTest, TestAllocationCPUGPU) {
SyncedMemory mem(10);
EXPECT_TRUE(mem.cpu_data());
EXPECT_TRUE(mem.gpu_data());
EXPECT_TRUE(mem.mutable_cpu_data());
EXPECT_TRUE(mem.mutable_gpu_data());
}
#endif
TEST_F(SyncedMemoryTest, TestAllocationCPU) {
SyncedMemory mem(10);
EXPECT_TRUE(mem.cpu_data());
EXPECT_TRUE(mem.mutable_cpu_data());
}
#ifndef CPU_ONLY // GPU test
TEST_F(SyncedMemoryTest, TestAllocationGPU) {
SyncedMemory mem(10);
EXPECT_TRUE(mem.gpu_data());
EXPECT_TRUE(mem.mutable_gpu_data());
}
#endif
TEST_F(SyncedMemoryTest, TestCPUWrite) {
SyncedMemory mem(10);
void* cpu_data = mem.mutable_cpu_data();
EXPECT_EQ(mem.head(), SyncedMemory::HEAD_AT_CPU);
caffe_memset(mem.size(), 1, cpu_data);
for (int i = 0; i < mem.size(); ++i) {
EXPECT_EQ((static_cast<char*>(cpu_data))[i], 1);
}
// do another round
cpu_data = mem.mutable_cpu_data();
EXPECT_EQ(mem.head(), SyncedMemory::HEAD_AT_CPU);
caffe_memset(mem.size(), 2, cpu_data);
for (int i = 0; i < mem.size(); ++i) {
EXPECT_EQ((static_cast<char*>(cpu_data))[i], 2);
}
}
#ifndef CPU_ONLY // GPU test
TEST_F(SyncedMemoryTest, TestGPURead) {
SyncedMemory mem(10);
void* cpu_data = mem.mutable_cpu_data();
EXPECT_EQ(mem.head(), SyncedMemory::HEAD_AT_CPU);
caffe_memset(mem.size(), 1, cpu_data);
const void* gpu_data = mem.gpu_data();
EXPECT_EQ(mem.head(), SyncedMemory::SYNCED);
// check if values are the same
char* recovered_value = new char[10];
caffe_gpu_memcpy(10, gpu_data, recovered_value);
for (int i = 0; i < mem.size(); ++i) {
EXPECT_EQ((static_cast<char*>(recovered_value))[i], 1);
}
// do another round
cpu_data = mem.mutable_cpu_data();
EXPECT_EQ(mem.head(), SyncedMemory::HEAD_AT_CPU);
caffe_memset(mem.size(), 2, cpu_data);
for (int i = 0; i < mem.size(); ++i) {
EXPECT_EQ((static_cast<char*>(cpu_data))[i], 2);
}
gpu_data = mem.gpu_data();
EXPECT_EQ(mem.head(), SyncedMemory::SYNCED);
// check if values are the same
caffe_gpu_memcpy(10, gpu_data, recovered_value);
for (int i = 0; i < mem.size(); ++i) {
EXPECT_EQ((static_cast<char*>(recovered_value))[i], 2);
}
delete[] recovered_value;
}
TEST_F(SyncedMemoryTest, TestGPUWrite) {
SyncedMemory mem(10);
void* gpu_data = mem.mutable_gpu_data();
EXPECT_EQ(mem.head(), SyncedMemory::HEAD_AT_GPU);
caffe_gpu_memset(mem.size(), 1, gpu_data);
const void* cpu_data = mem.cpu_data();
for (int i = 0; i < mem.size(); ++i) {
EXPECT_EQ((static_cast<const char*>(cpu_data))[i], 1);
}
EXPECT_EQ(mem.head(), SyncedMemory::SYNCED);
gpu_data = mem.mutable_gpu_data();
EXPECT_EQ(mem.head(), SyncedMemory::HEAD_AT_GPU);
caffe_gpu_memset(mem.size(), 2, gpu_data);
cpu_data = mem.cpu_data();
for (int i = 0; i < mem.size(); ++i) {
EXPECT_EQ((static_cast<const char*>(cpu_data))[i], 2);
}
EXPECT_EQ(mem.head(), SyncedMemory::SYNCED);
}
#endif
} // namespace caffe