对齐和未对齐的内存访问有什么区别?
我在TMS320C64x DSP上工作,我想使用内部函数(汇编指令的C函数),它有
ushort & _amem2(void *ptr);
ushort & _mem2(void *ptr);
Run Code Online (Sandbox Code Playgroud)
_amem22字节的对齐访问在哪里进行_mem2未对齐访问.
我什么时候应该使用哪个?
我尝试测量在OMAP ZOOM 3430 MDK附带的TMS32064x + DSP上执行一段代码所需的时钟周期.我看一下DSP芯片的"程序员指南",它说DSP支持clock()功能.
我做的很简单,我就是这么做的
start = clock();
for (i=0;i<100;i++){
/* do something here */
}
stop = clock();
total = stop - start;
Run Code Online (Sandbox Code Playgroud)
然后将"start","stop"和"total"的值放入以前使用ARM处理器分配的共享内存中.然后我只是将它打印到ARM端的屏幕上.
问题是,在我第一次执行时,我总是得到相同的"总"值,然后在我的下一次运行中我总是得到0!"开始"和"停止"值与"总"值一起出现.
最奇怪的是他们似乎遵循了一点点模式!我把输出结果如下:
# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop clock() value = 0x0000f9f9
# ./sampleapp
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop clock() value = 0xf9f9f9f9
Run Code Online (Sandbox Code Playgroud)
显然,clock()运行不正常,但我不确定这是因为我做错了什么,还是因为我的硬件不支持这种类型的东西.任何想法为什么会这样?
我是Scala的新手,并试图找出过滤和映射集合的最佳方法.这是一个解释我的问题的玩具示例.
方法1:这非常糟糕,因为我在列表中迭代两次并在每次迭代中计算相同的值.
val N = 5
val nums = 0 until 10
val sqNumsLargerThanN = nums filter { x: Int => (x * x) > N } map { x: Int => (x * x).toString }
Run Code Online (Sandbox Code Playgroud)
方法2:这稍微好一点,但我还需要计算(x * x)两次.
val N = 5
val nums = 0 until 10
val sqNumsLargerThanN = nums collect { case x: Int if (x * x) > N => (x * x).toString }
Run Code Online (Sandbox Code Playgroud)
那么,是否可以计算这个而不重复两次收集并避免重复相同的计算?
我正在为OMAP3430开发视频编解码器.我已经有用C++编写的代码,我尝试修改/移植它的某些部分以利用DSP(SDK(OMAP ZOOM3430 SDK)我有一个额外的DSP).
我尝试移植一个小的for循环,它运行的是非常少量的数据(~250字节),但是在不同的数据上大约需要2M次.但CPU和DSP之间通信的过载远远超过增益(如果我有的话).
我认为这个任务就像在普通计算机中优化GPU的代码一样.我的问题是移植什么样的部件会有益?GPU程序员如何处理这些任务?
在这些之后,DSP程序的执行开始,并且DSP在完成处理时通过消息通知GPP.只是为了尝试我不在DSP程序中进行任何处理.我只是将"处理完成"消息发送回GPP.这仍然需要耗费大量时间.可能是因为内部/外部内存使用,还是因为通信过载?
我试图使用C++ 11委托功能来构造一个以输入值为条件的类.这甚至可能吗?下面的代码在语法上不正确,但我把它放在这里是为了澄清.
enum MyEnum { A, B };
typedef struct {
int val;
MyEnum e;
} MyStruct;
class Foo {
public:
Foo(MyStruct a, MyStruct b) {} // a.e == A and b.e == B (assert checked)
Foo(MyStruct x) {
if (x.e == A) {
return Foo(x, {0, B});
} else {
return Foo({0, A}, x);
}
}
};
Run Code Online (Sandbox Code Playgroud) c++ ×4
c ×3
omap ×3
embedded ×2
c++11 ×1
clock ×1
collect ×1
collections ×1
constructor ×1
delegation ×1
dictionary ×1
filter ×1
memory ×1
scala ×1