张量类,它有自己的存储,但也可以映射外部指针
Tensor class that has its own storage, but that can also map an external pointer
我正在设计一个张量类。现在,我想扩展它,使其也能够映射(查看)指向某个外部数据数组的指针(该数组在外部保持活动)。我目前的方法是引入一个容器(下面的m_container
),并通过指针引用它(下面的m_data
)。为了映射,我可以简单地让m_data
指向外部,而不是指向m_container
。问题是,它在我的任何一个最小的例子中都能工作,但在更大的代码中,它有时会失败(即使不使用"map">)。
我知道这是一个模糊的问题。这也是我无法理解的原因。也许这个问题对其他人来说是显而易见的?
class Foo
{
private:
double m_container[2];
double *m_data = &m_container[0];
public:
Foo(){}
double& operator[](size_t i) { return m_data[i]; }
void map(double *D) { m_data = D; }
void copy(const double *D)
{
for ( size_t i = 0 ; i < 2 ; ++i )
m_data[i] = D[i];
}
};
int main()
{
double data[2];
data[0] = 0.;
data[1] = 1.;
Foo A;
A.map(data);
}
将张量类拆分为两个类。
张量视图和张量实例。
实例可以转换为视图,但视图不能转换为实例。
现在,观点本身可以分为两种不同的类型;切片或跨度是观察者。切片可以用于编辑其元素数据源中的元素数据,而观察者不能。您可能不需要切片,应该先编写观察程序。
一旦你有了这些类型,你就可以制作只采用你在算法中需要的类型的算法。它很少是一个完整的张量实例。
你必须小心地管理所查看的所有内容的生命周期。如果你觉得这很难,而且无法轻松地做到更好(而且很难,整个语言的性能都降低了2-3倍,只是为了避免手动解决这个问题),你可以修改你的视图类型,要求共享数组数据的所有权,并将堆上的所有张量数据存储在共享指针中。这是有成本的。
相关文章:
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 为什么即使直到最后才定义实际类型,也可以将依赖名称视为完整
- 斯塔克,堆栈,也可以在底部和顶部添加整数
- 重塑Microsoft的并发::d iagnostic::span,也可以检测外部跨度
- 在不工作的情况下为数组分配指针,但反过来也可以
- "fixed"大小的向量在 c++ 中也可以具有假大小(与内存大小相比)吗
- 为什么共享内存(在IPC中)不需要上下文切换?这是内核空间的内存,可以映射到用户空间
- 由于删除对象而导致的 Cpp 代码主线程冻结可以使用智能指针解决,也可以不使用智能指针来解决
- 即使在同一类型上,也可以将击曲线调用新的位置
- 除了两个构造函数外,C++库导入也可以工作
- 张量类,它有自己的存储,但也可以映射外部指针
- 如何将模板类型转换为字符串(如果它也可以是字符串)
- 在C 中的功能可以返回某物,也可以返回任何东西
- 也可以将特征用于1-矢量(标量)
- 在OpenGL 2.1中,即使在2D空间(具有2D纹理),也可以安全使用3D TEX坐标
- 即使在内置素上实例化,也可以向模板参数类型的驱动器进行明确调用
- 仅叮当:一对<路径,路径>可以放入向量中;一对也可以<unique_ptr,unique_ptr>;但不能成对<路径,unique_ptr>:为什么?
- 即使使用 malloc,两个字符 * 也可以具有相同的内存地址吗?