This option allows resilient device assignment, but it only works when your tensorflow is not GPU compiled. If your tensorflow is GPU supported the operations always perform on GPU no matter if allow_soft_placement is set or not and even if you set device as CPU. But if you set it as false and device as GPU but GPU cannot be found in your machine it raises error.
This config tells you which device the operation is allocated while building the graph. It can always find the prioritized device with best performance on you machine. It seems just to ignore your settings.
A Graph contains a set of tf.Operation objects, which represent units of computation; and tf.Tensor objects, which represent the units of data that flow between operations.
Things learnt: Graphs, Session, initializer, constant, placeholders, feeddict, variables,